Модуль:Sandbox/Mortorium
-- Таблица передается by reference (по ссылке) -- Примитивы передаются by value (по значению) local p = {} local lib = require('Module:Feature') local userError = require('Dev:User error') function p.championsToCSV() local champs = mw.loadData('Модуль:ChampionData/data') table.sort(champs) local s = "" for k, v in pairs(champs) do s = s .. k .. "\n" end return s end function p.referenceTest() local a = 5 referenceTest2(a) mw.log(a) end function referenceTest2(tbl) tbl = tbl + 1 end -- https://stackoverflow.com/questions/11856047/how-to-reference-lua-table-member-from-table-member --[=[ Нельзя в рамках одной таблицы ссылаться на её же элементы - до завершения объявления таблицы "не существует". ]=] function p.tableReferenceTest() local a = { 1 = 2, 2 = a1 } mw.log(a2) a1 = 6 mw.log(a2) end -- Данная функция проверяет целостность таблицы предметов на взаимосвязь предметов-компонентов и завершенных предметов (т.е. если предмет указан в таблице builds, присутствует ли тот в поле recipe завешенного предмета). Не спасает от опечаток. function p.checkItemConsistency() local items = mw.loadData('Модуль:ItemData/data') local result = {} -- Поиск: если указан в builds, то указан в recipe? for k, v in pairs(items) do local buildList = v.builds if buildList then for k1, v1 in ipairs(buildList) do -- Проверить, существует ли такой предмет вообще (проверка опечаток) if itemsv1 then local recipeList = itemsv1.recipe -- В Lua нет break / continue, так что костыль local errorFlag = true if recipeList then --mw.log('checking ' .. k .. ' and ' .. v1) for k2, v2 in ipairs(recipeList) do if v2 k then errorFlag = false end end else errorFlag = false end if (errorFlag and not(_isIgnored(k))) then table.insert(result, 'Несоответствие: ' .. k .. ' не входит в состав ' .. v1) end else table.insert(result, 'ОПЕЧАТКА! ' .. v1 .. ' как улучшение ' .. k) end end end end table.insert(result, ' ') -- Поиск: если указан в recipe, то указан в builds? for k, v in pairs(items) do local recipeList = v.recipe -- Если у предмета вообще есть состав if recipeList then for k1, v1 in ipairs(recipeList) do -- Проверить, существует ли такой предмет вообще (проверка опечаток) if itemsv1 then local buildList = itemsv1.builds -- В Lua нет break / continue, так что костыль local errorFlag = true if buildList then --mw.log('checking ' .. k .. ' and ' .. v1) for k2, v2 in ipairs(buildList) do if v2 k then errorFlag = false end end else errorFlag = false end if errorFlag then table.insert(result, 'Несоответствие: ' .. k .. ' нет среди улучшений ' .. v1) end else table.insert(result, 'ОПЕЧАТКА! ' .. v1 .. ' как часть ' .. k) end end end end return table.concat(result, " ") end -- Вспомогательная функция - позволяет игнорировать нарушение целостности для предметов лесников и их зачарований function _isIgnored(item) if(item "Клинок преследователя" or item "Сабля задиры" or item "Реплика Секундомера" or item "Ботинки с капелькой магии") then return true end return false end -- Проверяет по всем предметам ItemData.getCategories на ошибки function p.testCategories() local items = mw.loadData("Модуль:ItemData/data") local itemData = require("Модуль:ItemData") for k, v in pairs(items) do local result = pcall(itemData.getCategories, {k}) if(not(result)) then mw.log(k) end end end function p.conditionTest() local a = 5 local b = true if(b true) then mw.log("True") end if(a true) then mw.log("A") end end return p